'''
TCP服务端开发七步走：
1、创建服务端套接字对象
2、绑定端口号
3、设置监听
4、等待客户端的连接请求
5、接收数据
6、发送数据
7、关闭套接字
'''
import socket
import threading
from cgitb import handler
from uu import decode


class webServer():
    # 3、定义init魔术方法
    def __init__(self):
        # 创建服务端套接字对象
        self.tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        # 设置端口复用
        self.tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
        # 绑定端口号
        self.tcp_server_socket.bind(('',8000))
        # 设置监听
        self.tcp_server_socket.listen(128)

    # 5、定义handle_request方法，用于接收、发送数据
    def handle_request(self,new_socket,ip_port):
        # 接收数据
        content = new_socket.recv(1024).decode('gbk')
        print(f'已收到客户端{ip_port}的数据，内容是{content}')
        # 发送数据
        new_socket.send('信息已收到,over!'.encode('gbk'))
        # 关闭套接字
        new_socket.close()

    # 4、定义start方法，用来启动TCP服务
    def start(self):
        while True:
            # 等待客户端连接
            new_socket,ip_port = self.tcp_server_socket.accept()
            # 为每个客户端连接创建一个新线程，用于接收、发送数据
            sub_thread = threading.Thread(target=self.handle_request,args=(new_socket,ip_port))
            # 设置线程为守护线程，主程序退出时线程结束
            sub_thread.daemon = True
            sub_thread.start()


if __name__ == '__main__':
    # 1、实例化对象
    ws = webServer()
    # 2、调用对象中的方法，启动TCP服务
    ws.start()
